<?php
/**
 * Class IniciarBanco{}
 * Responsavem em iniciar e inseri dados no banco de dados.
 */
class IniciarBanco
{
    
    /**
     * Responsavel em verificar se banco esta vazio ou nao
     *
     * @return bool ira retornar true ou false
     */
    private function inicializarBanco()
    {
        try
        {
            $pdo = Conexao::open('sistema'); // abre conexao com o banco
            $consulta = $pdo->prepare('SELECT COUNT(*) AS numero_registros FROM cadastros.usuario');
            $consulta->execute();
            $linha = $consulta->fetch(PDO::FETCH_ASSOC); // pega resultaqdo da consulta
            $pdo = null; // fecha conexao
            if ( $linha['numero_registros'] == 0 )
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch ( PDOException $e )
        {
            new Excecao($e);
        }
    }
    
    /**
     * Responsavel em inserir dados no banco de dados.
     *
     * @return string ira retornar todos os sql executados
     */
    public function inserirBanco()
    {
        if ( !$this->inicializarBanco() )
        {
            return true;
        }
        set_time_limit(0);
        $retorno = '';
        $arquivos = array(  
            'inserir_inicial.sql', 
            'inserir_configuracao.sql', 
            'inserir_cadastros.sql', 
            'inserir_comercial.sql', 
            'inserir_financeiro.sql', 
            'inserir_hospedagem.sql', 
            'inserir_mensagem.sql', 
            'inserir_expositor.sql', 
            'inserir_secretaria.sql', 
            'inserir_almoxarifado.sql', 
            'inserir_turismo.sql', 
            'inserir_tarefas.sql', 
            'inserir_newsletter.sql',
            'inserir_solicitacao_servico.sql',
            
        );
        
        // atribui valores para inserir historico
//        $historico = new Historico();
//        $historico->setIdUsuario(1);
//        $historico->setAcao("Inserir");
        
        // percorre os arquivos para inserir no banco
        foreach ( $arquivos as $arquivo )
        {
            // verifica se é um arquivo valido
            if ( !file_exists('banco/' . $arquivo) )
            {
                return "n&atilde;o foi possivel encontrar o arquivo para iniciar banco";
            }
            echo $arquivo.'<br>';
            $file = fopen('banco/' . $arquivo, "r");
            try
            {
                $pdo = Conexao::open('sistema'); // abre conexao com o banco de dados
                if ( $arquivo !=  'inserir_configuracao.sql')
                {
                    while ( !feof($file) )
                    {
                        //$sql = trim(utf8_decode(fgets($file, 4096)));
                        $sql = trim(fgets($file, 4096));
                        if ( (!empty($sql)) && (substr($sql, 0, 1) != '#') )
                        {
                            $pdo->exec($sql); // executa SQL
                            $retorno .= $sql . '<br />';
                            if ( $arquivo != 'inserir_inicial.sql' )
                            {
                                $array_sql = explode(" ", $sql);
                                $tabelaModulo = $array_sql[2];
                                $tabela = explode(".", $tabelaModulo);

                                // atribui valores para inserir historico
//                                $historico->setIdRegistro($pdo->lastInsertId("{$tabelaModulo}_id_{$tabela['1']}_seq"));
//                                $historico->setNomeTabela($tabelaModulo);
//                                $historico->setSql($sql);
//                                $pdo->exec($historico->getSqlHistorico());
                                //$historico->cadastraHistorico(); // inseri historico
                            }
                        }
                        else
                        {
                            //$retorno .= $sql . "<br /><br />";
                            $retorno .=  "<br /><br />";
                        }
                    }
                }
                else // se for configuracao 
                {
                    while ( !feof($file) )
                    {
                        $sql = trim(fgets($file, 4096));
                        if ( (!empty($sql)) && (substr($sql, 0, 1) != '#') )
                        {
                            $pdo->exec($sql); // executa SQL
                            $retorno .= $sql . '<br />';
                            $array_sql = explode(" ", $sql);
                            $tabelaModulo = $array_sql[2];
                            $tabela = explode(".", $tabelaModulo);
                            // atribui valores para inserir historico
                            $idRegistro = $pdo->lastInsertId("{$tabelaModulo}_id_{$tabela['1']}_seq");
//                            $historico->setIdRegistro($idRegistro);
//                            $historico->setNomeTabela($tabelaModulo);
//                            $historico->setSql($sql);
//                            $pdo->exec($historico->getSqlHistorico());
                            
                            if ( $tabelaModulo == 'configuracao.menu_arquivo' )
                            {
                                for ( $i = 1 ; $i < 7 ; $i++)
                                {
                                    $sqlMenuArquivo = "INSERT INTO configuracao.menu_arquivo_permissao (id_menu_arquivo, id_permissao) VALUES ({$idRegistro}, {$i});";
                                    $pdo->exec($sqlMenuArquivo);
                                    $idRegistroMenuArquivo = $pdo->lastInsertId("configuracao.menu_arquivo_permissao_id_menu_arquivo_permissao_seq");
                                    // atribui valores para inserir historico
//                                    $historico->setIdRegistro($idRegistroMenuArquivo);
//                                    $historico->setNomeTabela('configuracao.menu_arquivo_permissao');
//                                    $historico->setSql($sqlMenuArquivo);
//                                    $pdo->exec($historico->getSqlHistorico());
                                    
                                    $sqlPermissaoUsuario = "INSERT INTO configuracao.permissao_usuario (id_menu_arquivo_permissao, id_usuario) VALUES ({$idRegistroMenuArquivo}, 1);";
                                    $pdo->exec($sqlPermissaoUsuario);
                                    // atribui valores para inserir historico
//                                    $historico->setIdRegistro($sqlPermissaoUsuario);
//                                    $historico->setNomeTabela('configuracao.permissao_usuario');
//                                    $historico->setSql($sqlPermissaoUsuario);
//                                    $pdo->exec($historico->getSqlHistorico());
                                }
                            }
                        }
                        else
                        {
                            //$retorno .= $sql . "<br /><br />";
                            $retorno .=  "<br /><br />";
                        }
                    }
                }
                $pdo = null; // fecha conexao
            }
            catch ( PDOException $e )
            {
                print_r($e);
                echo $sql;
                new Excecao($e);
                exit;
            }
        }
        return $retorno;
    }
    
    public function executaSql()
    {
        set_time_limit(0);
        $arquivos = array( 'criar_tabelas.sql' );
        
        // percorre os arquivos para inserir no banco
        foreach ( $arquivos as $arquivo )
        {
            // verifica se é um arquivo valido
            if ( !file_exists('banco/' . $arquivo) )
            {
                return "n&atilde;o foi possivel encontrar o arquivo para iniciar banco";
            }
            $file = fopen('banco/' . $arquivo, "r");
            $sql = '';
            
            while ( !feof($file) )
            {
                $linha = trim(utf8_decode(fgets($file, 4096)));
                // $linha = trim(fgets($file, 4096));
                if ( (!empty($linha)) && (substr($linha, 0, 1) != '#') )
                {
                    
                    $letrafinal = substr($linha, -1);
                    if ( $letrafinal == ';' )
                    {
                        try
                        {
                            $pdo = Conexao::open('sistema'); // abre conexao com o banco de dados
                            $sql .= ' ' . $linha;
                            $pdo->exec($sql); // executa SQL
                            $retorno .= $sql . "<br /><br />";
                            $sql = '';
                            $pdo = null; // fecha conexao
                        

                        }
                        catch ( PDOException $e )
                        {
                            // new Excecao($e);
                            

                            $retorno .= 'erro   ---  ' . $sql . "<br /><br />";
                            $sql = '';
                        }
                    }
                    else
                    {
                        $sql .= ' ' . $linha;
                    }
                
                }
                else
                {
                    $retorno .= $linha . "<br /><br />";
                }
            }
        
        }
        return $retorno;
    }
}
?>